unit Introductie_Unit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CoolTrayIcon, Menus, ExtCtrls, jpeg;

type
  TD_TaskbarLocatie = (TB_ONDER, TB_BOVEN, TB_RECHTS, TB_LINKS);

  TIntroductie_Form = class(TForm)
    CoolTrayIcon: TCoolTrayIcon;
    PopupMenu: TPopupMenu;
    TVScanner: TMenuItem;
    TVGidsnlhoofdpagina: TMenuItem;
    MijnpersoonlijkeTvGids: TMenuItem;
    WatiseropTV: TMenuItem;
    NuenStraks: TMenuItem;
    Allesvanvandaag: TMenuItem;
    Allesvanmorgen: TMenuItem;
    TVScannerafsluiten: TMenuItem;
    Introductie_Image: TImage;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure fadeIn;
    procedure fadeOut;
    procedure instellingFormLocatie();
    procedure bureaubladVerandering( var Msg: TMessage); message WM_SETTINGCHANGE;
  public
    { Public declarations }
    procedure showIntroductie(timeout: Integer;fadeEffect: Boolean);
    procedure AfterConstruction; override;
    procedure BeforeDestruction; override;
  end;

implementation

uses Types;

  {$R *.dfm}

  {
    *
  }
  procedure TIntroductie_Form.showIntroductie(timeout: Integer;fadeEffect: Boolean);
  begin

    //controleren of we met fadeEffect werken
    if fadeEffect then
      fadeIn();

    //wachten op timout
    Sleep(timeout);

    //controleren of we met fadeEffect werken
    if fadeEffect then
      fadeOut();
  end;

  {
    *
  }
  procedure TIntroductie_Form.fadeIn;
  begin
    Show;
    Repaint;
    while AlphaBlendValue < 255 do
    begin
      AlphaBlendValue := AlphaBlendValue + 5;
      Sleep(5);
    end;
  end;

  {
    *
  }
  procedure TIntroductie_Form.fadeOut;
  begin
    while AlphaBlendValue > 0 do
    begin
      AlphaBlendValue := AlphaBlendValue - 5;
      Sleep(5);
    end;
    Hide;
  end;

  {
    * FormClose
  }
  procedure TIntroductie_Form.FormClose(Sender: TObject;
  var Action: TCloseAction);
  begin

    //form niet vrijgeven maar alleen verbergen
    Action := caHide;
  end;

  {
    * instellingFormLocatie
  }
  procedure TIntroductie_Form.instellingFormLocatie();
  var
    hTaskbar: HWND;
    werkvlakOppervlak: TRect;
    taskbarOppervlak: TRect;
    taskbarLocatie: TD_TaskbarLocatie;
  begin
    //controleren taskbar locatie

    //locatie van taskbar ophalen
    hTaskBar := FindWindow( 'Shell_TrayWnd', nil );
    GetWindowRect( hTaskBar, taskbarOppervlak );

    //ophalen workspace van bureaublad
    systemparametersinfo (SPI_GETWORKAREA,0,@werkvlakOppervlak,0);


    //bepalen locatie taskbar
    taskbarLocatie := TB_RECHTS;
    if ( ( taskbarOppervlak.Top > (werkvlakOppervlak.Bottom Div 2) ) And ( taskbarOppervlak.Right >= werkvlakOppervlak.Right ) ) Then
        taskbarLocatie := TB_ONDER
    else
    if ( ( taskbarOppervlak.Top < (werkvlakOppervlak.Bottom Div 2) ) And ( taskbarOppervlak.Bottom <= werkvlakOppervlak.Right Div 2 ) ) Then
        taskbarLocatie := TB_BOVEN
    else
    if ( ( taskbarOppervlak.left < (werkvlakOppervlak.Right Div 2) ) And ( taskbarOppervlak.Top <= 0 ) ) Then
        taskbarLocatie := TB_LINKS;

    //taskbar onder
    case taskbarLocatie of

      //de form rechts onder in beeld zetten
      TB_ONDER: begin
                  left:=werkvlakOppervlak.right-Self.width;
                  top:=werkvlakOppervlak.bottom-Self.height;
                end;
      //de form rechts boven in beeld zetten
      TB_BOVEN: begin
                  left:=werkvlakOppervlak.right-Self.width;
                  top:=werkvlakOppervlak.Top;
                end;
      //de form rechts boven in beeld zetten
      TB_RECHTS: begin
                   left:=werkvlakOppervlak.right-Self.width;
                   top:=werkvlakOppervlak.Top;
                end;
      //de form links onder in beeld zetten
      TB_LINKS: begin
                  left:=werkvlakOppervlak.Left;
                  top:=werkvlakOppervlak.bottom-Self.height;
                end;
    end;
  end;

  {
    * bureaubladVerandering
  }
  procedure TIntroductie_Form.bureaubladVerandering( var Msg: TMessage);
  begin

    //controleren of het om een workArea message gaat
    if (Msg.WParam=SPI_SETWORKAREA) then
    begin

      //locatie van het form aanpassen
      instellingFormLocatie();
    end;
  end;

  {
    * AfterConstruction
  }
  procedure TIntroductie_Form.AfterConstruction;
  begin

    //form eigenschappen aanpassen
    AlphaBlendValue := 0;
    AlphaBlend := true;

    //locatie van het form aanpassen
    instellingFormLocatie();
  end;  

  {
    * BeforeDestruction
  }
  procedure TIntroductie_Form.BeforeDestruction;
  begin

  end;

end.
